#include "los_task.h"
#include "ohos_init.h"
#include "iot_gpio.h"
#include <stdio.h>

// 照明控制引脚
#define GPIO_LIGHT GPIO0_PA2
// #define GPIO_LIGHT GPIO0_PB4

// 全局控制变量
static int g_lightStatus = 0; // 0-关闭 1-开启

// 任务创建标志
static int g_taskCreated = 0;

// 照明控制任务
void light_control_task()
{
    // 初始化GPIO
    IoTGpioInit(GPIO_LIGHT);
    IoTGpioSetDir(GPIO_LIGHT, IOT_GPIO_DIR_OUT);
    IoTGpioSetOutputVal(GPIO_LIGHT, IOT_GPIO_VALUE0); // 初始关闭

    while (1)
    {
        // 实时响应状态变化
        IoTGpioSetOutputVal(GPIO_LIGHT,
                            g_lightStatus ? IOT_GPIO_VALUE1 : IOT_GPIO_VALUE0);

        LOS_Msleep(200); // 降低CPU占用
    }
}

// 手动开启照明
void light_on(void)
{
    g_lightStatus = 1;
}

// 手动关闭照明
void light_off(void)
{
    g_lightStatus = 0;
}

// 关灯函数
void init_light_off()
{
    // 检查任务是否已经创建
    if (!g_taskCreated)
    {
        unsigned int thread_id;
        TSK_INIT_PARAM_S task = {
            .pfnTaskEntry = (TSK_ENTRY_FUNC)light_control_task,
            .uwStackSize = 2048,
            .pcName = "light_control",
            .usTaskPrio = 10};

        if (LOS_TaskCreate(&thread_id, &task) != LOS_OK)
        {
            printf("创建照明控制任务失败\n");
        }
        else
        {
            g_taskCreated = 1; // 标记任务已创建
        }
    }

    // 关灯
    light_off();
}

// 开灯函数
void init_light_on()
{
    // 检查任务是否已经创建
    if (!g_taskCreated)
    {
        unsigned int thread_id;
        TSK_INIT_PARAM_S task = {
            .pfnTaskEntry = (TSK_ENTRY_FUNC)light_control_task,
            .uwStackSize = 2048,
            .pcName = "light_control",
            .usTaskPrio = 10};

        if (LOS_TaskCreate(&thread_id, &task) != LOS_OK)
        {
            printf("创建照明控制任务失败\n");
        }
        else
        {
            g_taskCreated = 1; // 标记任务已创建
        }
    }
    // 开灯
    light_on();
}